package com.jf.identity.dao.visexamid;

import com.jf.identity.entity.ExamBaseParam;
import com.jf.identity.entity.FoulFeedBackBatch;
import com.jf.identity.entity.FoulFeedBackInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 违纪/缺考上报dao
 *
 * @author FCG
 */
public interface FoulFeedBackDao {

    /**
     * 批量提交考生缺考信息
     *
     * @param examBaseParam        考试信息
     *                             "orgCode": "机构代码",
     *                             "examId": "考试计划编号",
     *                             "examSessionNum": "考试场次编号",
     *                             "logicExamRoomNum": "逻辑考场号"
     * @param foulFeedBackInfoList 违纪信息
     *                             "uid":"唯一主键",
     *                             "code": "违纪代码",
     *                             "examineeNo": "考生号",
     *                             "examinerName": "上报人员姓名",
     *                             "examinerIdCardNo": "上报人员身份证号",
     *                             "source": "上报来源：1视频监考  2考场终端",
     *                             "remark": "备注"
     * @return 成功条数
     */
    int insertFoulInfos(@Param("examBaseParam") ExamBaseParam examBaseParam,
                        @Param("foulFeedBackInfos") List<FoulFeedBackInfo> foulFeedBackInfoList);

    /**
     * 查询已存在的图片urls
     * @param foulFeedBackInfos foulFeedBackInfo uids
     * @return 图片urls
     */
    List<FoulFeedBackInfo> getPhotoUrls(@Param("examBaseParam") ExamBaseParam examBaseParam,
                                        @Param("foulFeedBackInfos")List<FoulFeedBackInfo> foulFeedBackInfos);

    /**
     * 现场上报缺考至 v_examinee_final_vodinfo_1
     *
     * @param examBaseParam     "examSessionNum": "考试场次编号",
     * @param foulFeedBackBatch "siteAbsent"："缺考标识"
     *                          "uid":"最终违纪uid"
     * @return 成功条数
     */
    int updateFinalAbsentInfo(@Param("examBaseParam") ExamBaseParam examBaseParam,
                              @Param("foulFeedBackBatch") FoulFeedBackBatch foulFeedBackBatch);

    /**
     * 更新 v_examinee_final_vodinfo_场次 表--违纪
     *
     * @param examBaseParam     考试信息
     *                          "examSessionNum": "考试场次编号",
     * @param foulFeedBackInfos 违纪信息
     *                          "code": "违纪代码",
     *                          "uid": "{考试计划编号}_{准考证号}_{场次}",
     * @return 成功条数
     */
    int insertFinalFoulInfo(@Param("examBaseParam") ExamBaseParam examBaseParam,
                            @Param("foulFeedBackInfos") List<FoulFeedBackInfo> foulFeedBackInfos);

    /**
     * 更新 v_examinee_final_vodinfo_场次 表--违纪
     *
     * @param examBaseParam     考试信息
     *                          "examSessionNum": "考试场次编号",
     * @param foulFeedBackInfos 违纪信息
     *                          "code": "违纪代码",
     *                          "uid": "{考试计划编号}_{准考证号}_{场次}",
     * @return 成功条数
     */
    int delFinalFoulInfo(@Param("examBaseParam") ExamBaseParam examBaseParam,
                         @Param("foulFeedBackInfos") List<FoulFeedBackInfo> foulFeedBackInfos);

    /**
     * 提交考生违纪/人工缺考信息
     *
     * @param examBaseParam    考试信息
     *                         "orgCode": "机构代码",
     *                         "examId": "考试计划编号",
     *                         "examSessionNum": "考试场次编号",
     *                         "logicExamRoomNum": "逻辑考场号"
     * @param foulFeedBackInfo 违纪信息
     *                         "uid":"唯一主键",
     *                         "code": "违纪代码",
     *                         "examineeNo": "考生号",
     *                         "examinerName": "上报人员姓名",
     *                         "examinerIdCardNo": "上报人员身份证号",
     *                         "source": "上报来源：1视频监考  2考场终端",
     *                         "remark": "备注"
     * @return 成功条数
     */
    int insertFoulInfo(@Param("examBaseParam") ExamBaseParam examBaseParam,
                       @Param("foulFeedBackInfo") FoulFeedBackInfo foulFeedBackInfo);

    /**
     * 取消考生违纪/人工缺考信息
     *
     * @param examBaseParam    考试信息
     *                         "orgCode": "机构代码",
     *                         "examId": "考试计划编号",
     *                         "examSessionNum": "考试场次编号",
     *                         "logicExamRoomNum": "逻辑考场号"
     * @param foulFeedBackInfo 违纪信息
     *                         "code": "违纪代码",
     *                         "examineeNo": "考生号",
     *                         "source": "上报来源：1视频监考  2考场终端"
     * @return 成功条数
     */
    int deleteFoulInfo(@Param("examBaseParam") ExamBaseParam examBaseParam,
                       @Param("foulFeedBackInfo") FoulFeedBackInfo foulFeedBackInfo);

    /**
     * 根据 uids 批量取消考生违纪/人工缺考信息
     *
     * @param uids 按照违纪信息 MD5生成的uid
     * @return 成功条数
     */
    int deleteFoulInfoByUids(
            @Param("examBaseParam") ExamBaseParam examBaseParam,
            @Param("uids")List<String> uids);

    /**
     * 查询考生人工缺考信息
     *
     * @param examBaseParam    考试信息
     *                         "orgCode": "机构代码",
     *                         "examId": "考试计划编号",
     *                         "examSessionNum": "考试场次编号",
     *                         "logicExamRoomNum": "逻辑考场号"
     * @param foulFeedBackInfo 违纪信息
     *                         "code": "违纪代码"-->此处传入 缺考code,
     *                         "examineeNo": "考生号",
     * @return 缺考信息条数
     */
    int hasAbsentInfo(@Param("examBaseParam") ExamBaseParam examBaseParam,
                      @Param("foulFeedBackInfo") FoulFeedBackInfo foulFeedBackInfo);

    /**
     * 查询考生人工违纪信息
     *
     * @param examBaseParam    考试信息
     *                         "orgCode": "机构代码",
     *                         "examId": "考试计划编号",
     *                         "examSessionNum": "考试场次编号",
     *                         "logicExamRoomNum": "逻辑考场号"
     * @param foulFeedBackInfo 违纪信息
     *                         "code": "违纪代码"-->此处传入 缺考code,
     *                         "examineeNo": "考生号",
     * @return 违纪信息条数
     */
    int hasViolateInfo(@Param("examBaseParam") ExamBaseParam examBaseParam,
                       @Param("foulFeedBackInfo") FoulFeedBackInfo foulFeedBackInfo);

    /**
     * 查询当前 考生的违纪代码
     *
     * @param examBaseParam    考试信息
     *                         "orgCode": "机构代码",
     *                         "examId": "考试计划编号",
     *                         "examSessionNum": "考试场次编号",
     * @param foulFeedBackInfo 违纪信息
     *                         "examineeNo": "考生号",
     * @return 违纪代码
     */
    List<FoulFeedBackInfo> getFinalFoulCodes(@Param("examBaseParam") ExamBaseParam examBaseParam,
                                             @Param("foulFeedBackInfo") FoulFeedBackInfo foulFeedBackInfo);
}















